/**
 * @File - Hal_debug.h
 * @Author - 
 * @Date - 2019-7-10
 */

#ifndef __HAL_DEBUG_H_
#define __HAL_DEBUG_H_

#include <stdint.h>
#include <stdio.h>
#include <stdarg.h>



#define CONSOLE_TX_BUF_SIZE         256


extern unsigned char s_bufTx[CONSOLE_TX_BUF_SIZE];


#define ENABLE_HEX_DUMP_LOG          0

#define ENABLE_TEST_LOG              0

#define ENABLE_LOGO_LOG              0

#define ENABLE_LOG_LOG               0

#define ENABLE_DEBUG_LOG             1

#define ENABLE_UTIL_LOG              1

#define ENABLE_AES_LOG               1

#define ENABLE_LEOKEY_LOG            1

#define ENABLE_LED_LOG               0

#define ENABLE_BLE_LOG               0

#define ENABLE_PROTOCOL_LOG          1

#define ENABLE_WATCHDOG_LOG          0

#define ENABLE_NFC_LOG               1

#define ENABLE_VOICE_LOG             1

#define ENABLE_ADC_LOG               0

#define ENABLE_BUTTON_LOG            1

#define ENABLE_TOUCH_LOG             0

#define ENABLE_MENU_LOG              0

#define ENABLE_FINGER_LOG            0

#define ENABLE_IWUP_LOG              0

#define ENABLE_PCB_TEST_LOG          0

#define ENABLE_SPIFLASH_LOG          1

#define ENABLE_NVS_LOG               1

#define ENABLE_PASSWORD_LOG          0

#define ENABLE_MISC_LOG              0

#define ENABLE_DEVICE_LOG            1

#define ENABLE_ASSERT_LOG            0

#define ENABLE_ADV_LOG               0

#define ENABLE_RTC_LOG               1

#define ENABLE_DRIVER_LOG            0

#define ENABLE_ERROR_LOG             0

#define ENABLE_WARN_LOG              0


extern void Hexdump_Printf(uint8_t* hexGroup, uint16_t len, char separator);

extern void Hexdump_Debug(uint8_t* hexGroup, uint16_t len, char separator);

extern void uart_log_send(const char *str_buf, uint16_t length);

extern void uart_log_printf(const char *strFormat, ...);



/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_LOGO_LOG
    #define Logo_Printf(fmt, args...)           do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Logo_Printf(fmt, args...)
#endif


/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_LOG_LOG
    #define Log_Printf(fmt, args...)            do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Log_Printf(fmt, args...)
#endif


/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_UTIL_LOG
    #define Util_Printf(fmt, args...)           do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Util_Printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_DEBUG_LOG
    #define Debug_Printf(fmt, args...)          do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Debug_Printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_LEOKEY_LOG
    #define LeoKey_Printf(fmt, args...)         do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define LeoKey_Printf(fmt, args...)
#endif


/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_LED_LOG
    #define LED_Printf(fmt, args...)            do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define LED_Printf(fmt, args...)
#endif


/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_BLE_LOG
    #define BLE_Printf(fmt, args...)            do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define BLE_Printf(fmt, args...)
#endif


/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_PROTOCOL_LOG
    #define Protocol_Printf(fmt, args...)       do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Protocol_Printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_WATCHDOG_LOG
    #define WatchDog_Printf(fmt, args...)       do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define WatchDog_Printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_ADV_LOG
    #define ADV_Printf(fmt, args...)            do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define ADV_Printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_ASSERT_LOG
    #define Assert_Printf(fmt, args...)         do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Assert_Printf(fmt, args...)
#endif


/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_VOICE_LOG
    #define Voice_Printf(fmt, args...)          do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Voice_Printf(fmt, args...)
#endif
                                                
/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_AES_LOG
    #define AES_Printf(fmt, args...)          do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define AES_Printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_ADC_LOG
    #define ADC_printf(fmt, args...)            do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define ADC_printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_BUTTON_LOG
    #define Button_printf(fmt, args...)         do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Button_printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_TOUCH_LOG
    #define Touch_printf(fmt, args...)          do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Touch_printf(fmt, args...)
#endif
/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_MENU_LOG
    #define Menu_printf(fmt, args...)           do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Menu_printf(fmt, args...)
#endif
/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_NFC_LOG
    #define NFC_printf(fmt, args...)            do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define NFC_printf(fmt, args...)
#endif
/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_FINGER_LOG
    #define Finger_Printf(fmt, args...)         do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Finger_Printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_IWUP_LOG
    #define IWUP_printf(fmt, args...)           do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define IWUP_printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_PCB_TEST_LOG
    #define Test_Printf(fmt, args...)           do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Test_Printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_DEVICE_LOG
    #define Device_printf(fmt, args...)         do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Device_printf(fmt, args...)
#endif


/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_DRIVER_LOG
    #define Driver_printf(fmt, args...)         do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Driver_printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_MISC_LOG
    #define Misc_printf(fmt, args...)           do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Misc_printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_SPIFLASH_LOG
    #define Flash_Printf(fmt, args...)          do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Flash_Printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_NVS_LOG
    #define NVS_Printf(fmt, args...)            do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define NVS_Printf(fmt, args...)
#endif


/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_PASSWORD_LOG
    #define Password_printf(fmt, args...)       do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define Password_printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_RTC_LOG
    #define RTC_Printf(fmt, args...)            do{\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define RTC_Printf(fmt, args...)
#endif


/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_ERROR_LOG
    #define ERROR_printf(fmt, args...)          do{\
                                                uart_log_printf("<<Files:%s, Line:%d, Function:%s>> ", __FILE__, __LINE__, __FUNCTION__);\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define ERROR_printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#if ENABLE_WARN_LOG
    #define WARN_printf(fmt, args...)           do{\
                                                uart_log_printf("<<Files:%s, Line:%d, Function:%s>> ", __FILE__, __LINE__, __FUNCTION__);\
                                                uart_log_printf(fmt, ##args);\
                                                }while(0)
#else
    #define WARN_printf(fmt, args...)
#endif

/*********************************************************************************/
/*********************************************************************************/

#endif // __HAL_DEBUG_H_

